package com.czy.owner.utils;


import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Created by wangyang on 2016/5/23.
 * GSON解析工具类
 */
public class GsonUtils {


        /**
         * 描述 将json字符串解析为bean
         * @param json 待解析json
         * @param cls 类
         * @return
         */
        public static <T> T getBean(String json, Class<T> cls) {
            T t = null;
            Gson gson = new Gson();
            try {
                t = gson.fromJson(json, cls);
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                return null;
            }

            return t;
        }

        /**
         * 描述 解析json为list<String>
         * @param jsonString 待解析json
         * @return
         */
        public static List<String> getList(String jsonString) {
            List<String> list = new ArrayList<String>();
            try {
                Gson gson = new Gson();
                list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
                }.getType());
            } catch (Exception e) {
                // TODO: handle exception
                return null;
            }
            return list;

        }
        /**
         * 描述 解析字符串为 list<Map>
         * @param jsonString 待解析字符串
         * @return
         */
        public static List<Map<String, Object>> listKeyMaps(String jsonString) {
            List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
            try {
                Gson gson = new Gson();
                list = gson.fromJson(jsonString,
                        new TypeToken<List<Map<String, Object>>>() {
                        }.getType());
            } catch (Exception e) {
                // TODO: handle exception
                return null;
            }
            return list;
        }
        /**
         * 将object解析为json字符串
         * @param object 对象
         * @return
         */
        public static String GsonToString(Object object){
            Gson gson=new Gson();
            return gson.toJson(object);

        }
        /**
         * 描述 list<t>类型解析为 字符串
         * @param list 待解析list<可为任何类型>
         * @return
         */
        public static <T> String listToJson(List<T> list){
            Gson gson=new Gson();
            try {
                return gson.toJson(list);
            } catch (Exception e) {
                // TODO: handle exception
                return null;
            }

        }

        public static <T> T fromJson(String json, Class<T> clazz) {
            Gson gson=new Gson();
            return gson.fromJson(json, clazz);
        }

        public static <T> T fromJson(String json, Type type) {
            Gson gson=new Gson();
            return gson.fromJson(json, type);
        }
        //解析{}
//        public static Map<String, StoreActivityModel> jsonToMapData(String json){
//            Gson gson=new Gson();
//            return gson.fromJson(json, new TypeToken<Map<String, StoreActivityModel>>(){}.getType());
//        }
    /**
     * 描述 将json解析为list对象
     * @param json 待解析字符串
     * @param cls 类名
     * @return
     */
        //解析list数组[]
        public static <T> ArrayList<T> fromJsonList(String json, Class<T> cls) {
            Gson gson=new Gson();
            ArrayList<T> mList = new ArrayList<T>();
            JsonArray array = new JsonParser().parse(json).getAsJsonArray();
            for(final JsonElement elem : array){
                mList.add(gson.fromJson(elem, cls));
            }
            return mList;
        }


}
